/**
 * 
 */
package quartz.job;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.PersistJobDataAfterExecution;

/**
 * 
 *
 * @author Gavin<br>
 *         2020年6月16日
 */
//加上这个注解后这个类就是每次调用的时候都会对这个job进行持久化，就会保存一些数据的信息
@PersistJobDataAfterExecution
public class HelloJob implements Job {
	private Integer count;

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {// set方法的字段如果和jobdataMap中的字段一样的话那么quartz就会自动赋予该字段值，如果trigger和jobDetail里面的一样的话trigger会覆盖后者
		this.count = count;
	}

	/* 
	 */
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		Date date = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = dateFormat.format(date);
		System.out.println("正在进行数据库的备份工作，备份数据库的时间是：" + dateString);
		// 获取jobdetail的信息
		JobKey jobKey = context.getJobDetail().getKey();
		System.out.println(jobKey.getGroup());
		System.out.println(jobKey.getName());
		System.out.println("任务的名字(带路径)" + context.getJobDetail().getJobClass().getName());
		System.out.println("任务的名字" + context.getJobDetail().getJobClass().getSimpleName());
		JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
		System.out.println("jobdetail传递的数据" + jobDataMap.get("message"));
		JobDataMap triggerDataMap = context.getTrigger().getJobDataMap();
		System.out.println("触发器传递的参数" + triggerDataMap.get("message"));

		// 获取其它任务
		System.out.println("当前任务执行的时间：" + dateFormat.format(context.getFireTime()));
		System.out.println("下一次执行任务的时间" + dateFormat.format(context.getNextFireTime()));

		// 共享值
		count++;//如果没有加@PersistJobDataAfterExecution这个注解那么每次调用都是1，加了后就会保存状态会进行累加
		System.out.println("count的数量:    " + count);
		context.getJobDetail().getJobDataMap().put("count", count);
	}

}
